构建SpringBoot 应用docker镜像

1.第1课 高级篇幅之构建SpringBoot应用docker镜像上集

官方文档:https://spring.io/guides/gs/spring-boot-docker/

1、步骤:maven里面添加配置pom.xml

简介:使用Docker的maven插件,构建springboot应用
 <!--在maven最上面的申明的地方--properties-->
     <properties>
       <docker.image.prefix>xdclass</docker.image.prefix>
    </properties>

    <build>
    <!--项目打包的名称-->
        <finalName>docker-demo</finalName>
        <plugins>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.3.6</version>
                <configuration>
                    <repository>${docker.image.prefix}/${project.artifactId}</repository>
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>
        </plugins>
    </build>

    配置讲解
    Spotify 的 docker-maven-plugin 插件是用maven插件方式构建docker镜像的。
    ${project.build.finalName} 产出物名称,缺省为${project.artifactId}-${project.version}

⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️

https://blog.csdn.net/TMaskBoy/article/details/82562413

image-20181111112653319

高能预警

  • No plugin found for prefix ‘docker’ in the current project and in the plugin groups
    在Maven的配置文件 conf/settings.xml中添加com.spotify

    1
    2
    3
    4
    5
    <pluginGroups>  
    <pluginGroup>com.spotify</pluginGroup>
    </pluginGroups>

    注意setting配置文件在maven的仓库里面找不到 重新更新idea中maven的插件 然后 更换.m2中conf中setting.xml的内容
  • #详细错误如下:om.spotify.docker.client.shaded.com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of com.spotify.docker.client.messages.RegistryAuth: no String-argument constructor/factory method to deserialize from String value (‘swarm’)

    起初pom.xml中docker-maven-plugin的版本是1.0.0,使用mvn package docker:build -e构建Image出现如上异常。
    百般搜索无果,后来看其他的Spring Boot构建Docker镜像有用的是0.4.3,遂修改之。

    1. 解决办法

    将小D课堂里面的插件

 <groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.3.6</version>

改为⭐️⭐️

1
2
3
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId> ⭐️ //这边不是dockerfile-maven-plugin了而是docker-maven-plugin
<version>0.4.13</version>

⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️

第2课 高级篇幅之构建SpringBoot应用docker镜像下集

步骤1创建Dockerfile,默认是根目录,(可以修改为src/main/docker/Dockerfile,如果修则需要制定路径)

简介:打包SpringCloud镜像并上传私有仓库并部署
1、 什么是Dockerfile : 由一系列命令和参数构成的脚本,这些命令应用于基础镜像, 最终创建一个新的镜       像
实战
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]


参数讲解:
FROM <image>:<tag> 需要一个基础镜像,可以是公共的或者是私有的, 后续构建会基于此镜像,如果同一个Dockerfile中建立多个镜像时,可以使用多个FROM指令

VOLUME  配置一个具有持久化功能的目录,主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容   器的/tmp。改步骤是可选的,如果涉及到文件系统的应用就很有必要了。/tmp目录用来持久化到 Docker 数据 文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录 

ARG  设置编译镜像时加入的参数, ENV 是设置容器的环境变量
COPY : 只支持将本地文件复制到容器 ,还有个ADD更强大但复杂点
ENTRYPOINT 容器启动时执行的命令
EXPOSE 8080 暴露镜像端口

第3课构建镜像

2、构建镜像
        mvn install dockerfile:build
        打标签
        docker tag a1b9fc71720d registry.cn-shenzhen.aliyuncs.com/xdclass/xdclass_images:docker-demo-v201808
        推送到镜像仓库
        docker push registry.cn-shenzhen.aliyuncs.com/xdclass/xdclass_images:docker-demo-v201808

        应用服务器拉取镜像
        docker pull registry.cn-shenzhen.aliyuncs.com/xdclass/xdclass_images:docker-demo-v201808


        docker run -d --name xdclass_docker_demo1 -p 8099:8080  a1b9fc71720d

        3、查看启动日志 docker logs -f  containerid

实战

1.mvn install dockerfile:build。不知道为什么终端没有用idea中终端却有用 😄哈哈

image-20181111130637806

2.docker images

image-20181111130706064

没有名字镜像??注意在idea中测试的话就要用idea 不要随变改成终端

image-20181111131256001

3.docker run -d –name demo -p 8080:8080 8ef42611e3b0

备注:运行镜像 –name 指定名字 -d 后台运行 8ef42611e3b0:刚刚构建的image的ID

name 不会用就别用

image-20181111133053363

4.docker ps

查看一下镜像的进程

image-20181111133138180

???没有程序。测试一下